package br.unisul.redeNeural;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class TesteRedeNeural {

	RedeNeural rna;
	Configuracao configuracao;


	@Before
	public void setUP(){
		configuracao = new Configuracao(3, 4);
		configuracao.setSuportaVies(true);
		rna = new RegraDelta(configuracao);
		rna.inicializarValores();
	}

	@Test
	public void pegarArrayNeuronios(){
		/***
		 * Pegar em uma posição invalida
		 */
		Assert.assertTrue((rna.getNeuronios(5) == null));
		/**
		 * pega os neuronios da camada de entrada e saida,
		 * sendo que a minha rede é composta por uma camada
		 * de entrada com 3 neuronios e uma camada de saida de 4 
		 * neuronios
		 */
		Assert.assertTrue((rna.getNeuronios(0).length == 3));
		Assert.assertTrue((rna.getNeuronios(1).length == 4));
	}
	
	@Test
	public void pegarArrayPesos(){
		/***
		 * Pegar em uma posição invalida
		 */
		Assert.assertTrue((rna.getPesos(-1) == null));
		Assert.assertTrue((rna.getPesos(1) == null));
		/**
		 * pega os pesos que fazem parte entre a camada de entrada e a
		 * camada de saida
		 */
		Assert.assertTrue((rna.getPesos(0).length == 3));
	}

	@Test
	public void addCamada(){
		configuracao.addCamadaIntermediaria(new ConfiguracaoCamadaIntemediaria(5));
		rna.inicializarValores();
		Assert.assertTrue((rna.getNeuronios(1).length == 5));
		
	}
	@Test
	public void pegarNeuronioEspecifico(){
		Assert.assertTrue(rna.getNeuronio(0, 2) != null);
		Assert.assertTrue(rna.getNeuronio(2, 5) == null);
	}
	
	@Test
	public void pegarPesoEspecifico(){
		Assert.assertTrue(rna.getPesosEntrada(1, 2) != null);
		Assert.assertTrue(rna.getPesosEntrada(1, 0) != null);
	}
	
	@After
	public void tearDown(){

	}


}
